package com.qianheng.kit.base.util;

import java.io.File;
import java.io.IOException;

import com.google.gson.JsonObject;
import com.google.gson.JsonParser;
import org.apache.commons.io.FileUtils;

public class JsonFormat {

    /**
     *
     * @param resString 待格式化的json字符串
     * @param maxLevel  格式化保留层级
     * @return
     */
    public static String responseFormat(String resString, int maxLevel) {
        if (resString == null) {
            return null;
        }
        StringBuffer jsonForMatStr = new StringBuffer();
        int level = 0;
        for (int index = 0; index < resString.length(); index++) {//获取s中的每个字符
            char c = resString.charAt(index);//level大于0并且jsonForMatStr中的最后一个字符为\n,jsonForMatStr加入\t
            if (level > 0 && '\n' == jsonForMatStr.charAt(jsonForMatStr.length() - 1)) {
                jsonForMatStr.append(getLevelStr(level));
            }
            //遇到"{"和"["要增加空格和换行，遇到"}"和"]"要减少空格，以对应，遇到","要换行
            switch (c) {
                case '{':
                    //case '[':
                    jsonForMatStr.append(c);
                    if (level < maxLevel) {
                        jsonForMatStr.append("\n");
                    }
                    level++;
                    break;
                case ',':
                    jsonForMatStr.append(c);
                    if (level < maxLevel) {
                        jsonForMatStr.append("\n");
                    }
                    break;
                case '}':
                    //case ']':
                    if (level < maxLevel) {
                        jsonForMatStr.append("\n");
                    }
                    level--;
                    if (level < maxLevel) {
                        jsonForMatStr.append(getLevelStr(level));
                    }
                    jsonForMatStr.append(c);
                    break;
                default:
                    jsonForMatStr.append(c);
                    break;
            }
        }
        return jsonForMatStr.toString();
    }

    private static  String getLevelStr(int level) {
        StringBuffer levelStr = new StringBuffer();
        for (int levelI = 0; levelI < level; levelI++) {
            levelStr.append("\t");
        }
        return levelStr.toString();
    }

    /**
     * 使用gson校验格式并格式化成一行
     * (json字段顺序不会重排, 如果使用fastjson会重排)
     * @param json
     * @return
     */
    private static String toSimpleJsonString(String json) {
        JsonParser jsonParser = new JsonParser();
        JsonObject jsonObject = jsonParser.parse(json).getAsJsonObject();
        return jsonObject.toString();
        //Gson gson = new GsonBuilder().setPrettyPrinting().create();
        //return gson.toJson(jsonObject);
    }

    public static void main(String[] args) throws IOException {
        String s1 = FileUtils.readFileToString(new File(""), "utf-8");
        String s2 = responseFormat(s1, 2);
        System.out.println(s2);
    }

}